package controller

import (
	"TTMS/dao"
	"TTMS/model"
	"html/template"
	"net/http"
	"strconv"
)

// ScheduleManage 管理演出计划
func ScheduleManage(w http.ResponseWriter, r *http.Request) {
	//获取 sess
	sess, _ := dao.IsLogin(r)
	//获取日期
	date := r.PostFormValue("date")
	if date == "" {
		//获取全部的演出计划
		schedules, _ := dao.GetSchedules()
		sess.Schedules = schedules
	} else {
		//获取该在日期的演出计划
		sess.Date = date
		schedules, _ := dao.GetSchedulesByDate(date)
		sess.Schedules = schedules
	}
	//解析模版
	t := template.Must(template.ParseFiles("views/pages/manager/schedule_manage.html"))
	t.Execute(w, sess)
}

// ToUpdateOrAddSchedulePage 前往修改或添加演出计划的页面
func ToUpdateOrAddSchedulePage(w http.ResponseWriter, r *http.Request) {
	//获取演出计划的ID
	scheduleID := r.FormValue("scheduleID")
	//获取要添加或修改的演出计划的日期
	date := r.FormValue("date")
	//获取电影名称
	filmName := r.FormValue("filmName")
	//根据电影名称和时间判断该电影在改时间是否热映
	film := dao.CheckFilmByDateAndName(date, filmName)
	//将 id 转为 int64 类型
	ischeduleID, _ := strconv.ParseInt(scheduleID, 10, 0)
	//通过ID获取演出计划
	schedule := dao.GetSchedulesByID(ischeduleID)
	//获取所有在 date 热映的电影
	films, _ := dao.GetFilmsByDate(date)
	conflict := &model.Conflict{
		Films:       films,
		Date:        date,
		NowFilmName: filmName,
	}
	if film.ID > 0 || date == "" {
		conflict.FilmIsOk = true
	} else {
		conflict.FilmIsOk = false
	}
	if schedule.ID > 0 {
		//去修改演出计划的页面
		conflict.Schedule = schedule
		//解析模版
		t := template.Must(template.ParseFiles("views/pages/manager/schedule_edit.html"))
		t.Execute(w, conflict)
	} else {
		//去添加新演出计划的页面
		conflict.Schedule = &model.Schedule{ID: 0}
		//解析模版
		t := template.Must(template.ParseFiles("views/pages/manager/schedule_edit.html"))
		t.Execute(w, conflict)
	}
}

// SaveSchedule 修改或添加演出计划
func SaveSchedule(w http.ResponseWriter, r *http.Request) {
	schedule := &model.Schedule{}
	//获取演出计划的相关信息
	schedule.ID, _ = strconv.ParseInt(r.FormValue("scheduleID"), 10, 0)
	schedule.HallID, _ = strconv.ParseInt(r.FormValue("hallID"), 10, 0)
	schedule.FilmName = r.FormValue("filmName")
	schedule.Date = r.FormValue("date")
	schedule.StartTime = r.FormValue("startTime")
	schedule.EndTime = r.FormValue("endTime")
	schedule.Price, _ = strconv.ParseFloat(r.FormValue("price"), 64)
	//判断该计划是否与其他计划冲突
	schedule0 := dao.GetScheduleByDateAndTime(schedule)
	//判断该演出计划是否存在
	schedule1 := dao.GetSchedulesByID(schedule.ID)
	//获取所有在 date 热映的电影
	films, _ := dao.GetFilmsByDate(schedule.Date)
	//根据电影名称和时间判断该电影在改时间是否热映
	film := dao.CheckFilmByDateAndName(schedule.Date, schedule.FilmName)
	conflict := model.Conflict{
		Schedule:         schedule,
		ConflictFilmName: schedule0.FilmName,
		Date:             schedule.Date,
		Films:            films,
		FilmIsOk:         false,
		NowFilmName:      schedule.FilmName,
	}
	if film.ID > 0 {
		conflict.FilmIsOk = true
	}
	if schedule0.ID != schedule.ID && schedule0.ID > 0 {
		//该时间段已有演出
		t := template.Must(template.ParseFiles("views/pages/manager/schedule_edit.html"))
		t.Execute(w, conflict)
	} else if film.ID <= 0 {
		//该电影在该时间段不热映
		t := template.Must(template.ParseFiles("views/pages/manager/schedule_edit.html"))
		t.Execute(w, conflict)
	} else if schedule1.ID > 0 {
		//修改演出计划
		dao.UpdateSchedule(schedule)
		//前往管理演出计划页面
		ScheduleManage(w, r)
	} else {
		//添加演出计划
		//该时间段没有演出
		dao.AddSchedule(schedule)
		//前往管理演出计划页面
		ScheduleManage(w, r)
	}
}

// DeleteSchedule 删除演出计划
func DeleteSchedule(w http.ResponseWriter, r *http.Request) {
	//获取要删除的演出计划的id
	id, _ := strconv.ParseInt(r.FormValue("ID"), 10, 0)
	//根据 id 删除演出计划
	dao.DeleteSchedule(id)
	//前往管理演出计划页面
	ScheduleManage(w, r)
}
